﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BusinessLogic;
using System.Text.RegularExpressions;

namespace Presentation.contenido
{
    public partial class panelUsuario : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Se crea una nueva instancia de Usuario y se le asigna el resultado de la busqueda del usuario actual por
                //su numero guardado en la variable de sesion.
                Persona unF = Sistema.getInstancia().getFuncEspecificoByNro(long.Parse(Session["NroFunc"].ToString()));
                //Se asignan las propiedades del objeto devuelto a los campos del formulario.
                lblNroFun.Text = unF.NroFuncionario.ToString();
                txtNombre.Text = unF.Nombre;
                txtApellido.Text = unF.Apellido;
                txtMail.Text = unF.Mail;
                txtTel.Text = unF.Telefono;
                txtInterno.Text = unF.Interno;
                txtSeccion.Text = unF.Seccion;
                txtPass.Text = unF.Contrasenia;
            }
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            if (validarForm())
            {
                
                //Se crea una instancia de Persona y se le asigna el tipo de funcionario especializado
                //devuelto de acuerdo al rol del funcionario 
                //que esta logueado.
                //Luego se le asignan los valores de sus propiedades segun los campos del formulario.
                Persona unaP = Sistema.getInstancia().getTipoFuncByRol(Session["RolFunc"].ToString());
                unaP.NroFuncionario = long.Parse(lblNroFun.Text);
                unaP.Nombre = txtNombre.Text;
                unaP.Apellido = txtApellido.Text;
                unaP.Mail = txtMail.Text;
                unaP.Telefono = txtTel.Text;
                unaP.Interno = txtInterno.Text;
                unaP.Seccion = txtSeccion.Text;
                unaP.Activo = true;
                //Se utiliza la funcion de verificacion de rol de un Funcionario, la cual devuelve un Funcionario por su nro y password, para
                //saber si el password ha cambiado..
                if (Sistema.getInstancia().verifRolFuncionario(long.Parse(lblNroFun.Text), txtPass.Text) != null)
                {
                    //Si no ha cambiado...
                    unaP.Contrasenia = txtPass.Text;
                    //Se actualiza el usuario.
                    unaP.update();
                }
                else
                {
                    //Si ha cambiado y si se han puesto correctamente la contraseña nueva con su confirmacion y la anterior...
                    if (Sistema.getInstancia().verifRolFuncionario(long.Parse(lblNroFun.Text), txtOldPass.Text) != null)
                    {
                        if (txtPass.Text == txtConPass.Text)
                        {
                            unaP.Contrasenia = txtConPass.Text;
                            //Se actualiza el usuario.
                            unaP.update();
                        }
                        else
                        {
                            //Si la contraseña nueva no coincide con la confirmacion, se muestra un mensaje de error.
                            lblErrPass.Text = "Las contraseñas no coinciden.";
                        }
                    }
                    else
                    {
                        //Si la contraseña anterior no es valida, se muestra un mensaje de error.
                        lblErrOld.Text = "Contraseña incorrecta.";
                    }
                }
                lblInfo.Text = "Los datos han sido actualizados correctamente.";
            }
        }
        protected bool validarForm()
        {
            bool val = false;
            //Se verifica que el nombre sea valido.
            if ((txtNombre.Text).Length > 0 && (txtNombre.Text).Length < 30)
            { 
                //Se verifica que el apellido sea valido.
                if((txtApellido.Text).Length > 0 && (txtApellido.Text).Length < 30)
                {
                    //Se verifica que el mail sea valido.
                    if((txtMail.Text).Length > 0 && (txtMail.Text).Length < 50)
                    {
                        //Se verifica que el telefono sea valido.
                        if((txtTel.Text).Length > 0 && (txtTel.Text).Length < 30)
                        {
                            //Se verifica que el interno sea valido.
                            if((txtInterno.Text).Length > 0 && (txtInterno.Text).Length < 20)
                            {
                                //Se verifica que la seccion sea valida.
                                if((txtSeccion.Text).Length > 0 && (txtSeccion.Text).Length < 50)
                                {
                                    val = true;
                                }
                                else
                                {
                                    lblInfo.Text = "Ingrese un nombre de seccion menor de 50 caracteres";
                                }
                            }
                            else
                            {
                                lblInfo.Text = "Ingrese un interno menor de 20 numeros";
                            }
                        }
                        else
                        {
                            lblInfo.Text = "Ingrese un telefono menor de 30 numeros";
                        }
                    }
                    else
                    {
                        lblInfo.Text = "Ingrese un mail valido, menor de 50 caracteres";
                    }
                }
                else
                {
                    lblInfo.Text = "Ingrese un apellido menor de 30 caracteres";
                }
            }
            else
            {
                lblInfo.Text = "Ingrese un nombre menor de 30 caracteres";
            }
            return val;
        }

        
    }
}